#ifndef MATRIXGRAPH_H_INCLUDED
#define MATRIXGRAPH_H_INCLUDED

/******************************************************
 *  Project：
 *  Function:
 *  Description: 数组(邻接矩阵)表示法
 *  PROJECT_FILENAME:
 *  Author: coder-itl
 ******************************************************
 *  Copyright $NOW_L by coder-itl
 ******************************************************/

#include "GraphModel.h"

typedef struct {
    /* 顶点数组 */
    VerTexDataType verTexs[MAX_VERTEX_NUM];
    /* 邻接矩阵 */
    ArcType arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM];
    /* 图的顶点数 */
    int verTexCount;
    /* 图的边或弧数 */
    int arcCount;
    /* 图的类型 */
    GraphKind kind;
} ArrayMatrixGraph;


/**
 * 邻接矩阵创建无向图
 * @param G
 * @return 0(error) | 1(ok)
 */
Status CreateUDG(ArrayMatrixGraph *G);

/**
 * 返回某个定点在顶点集合中的下标(从 0 开始),不存在返回 -1
 * @param G
 * @param vex
 * @return
 */
int LocateVex(ArrayMatrixGraph *G, VerTexDataType vex);

/**
 * 测试
 */
void TestMatrixGraph();

/**
 * 打印无向图的邻接矩阵
 * @param G
 */
void PrintGraph(ArrayMatrixGraph G);

/**
 * 有向图
 * @param G
 * @return
 */
Status CreateDG(ArrayMatrixGraph *G);


/**
 * 创建有向网
 * @param G
 * @return
 */
Status CreateDN(ArrayMatrixGraph *G);

#endif // MATRIXGRAPH_H_INCLUDED
